<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>

<script>
    // 关于构造函数的返回值
    // 1. 如果构造函数不设置返回值 => 默认返回被创建的实例化对象
    // 2. 构造函数还可以自定义返回值
    //       a. 如果返回值是值类型 => 则还是返回被创建的实例化对象
    //       b. 如果返回值是引用类型(对象)  =>  直接返回该数据 

    // 自定义伪数组
    // 1. 创建一个真数组
    // 2. 将真数组的原型属性指向某个构造函数的原型对象  => 有数组的结构,但是不能使用数组的拓展方法([[Prototype]] 指向其他构造函数的原型对象)
    // Object.setPrototypeOf(list, Fn.prototype)   

    // 值类型
    // return 100 
    // return "hello" 
    // return true 
    // return null 
    // return undefined 

    // 引用类型 
    // return new Number(100) 
    // return new String("hello") 
    // return new Boolean(true) 
    // return new Array(10, 20, 30) 


    function Fn() {

        // return [10, 20, 30]   
        // 返回值是其他构造函数创建的实例化对象(Array) => 无法使用当前构造函数原型对象(Fn.prototype)上的方法


        var list = [10, 20, 30]
        // 想让数组list也可以访问当前构造函数原型对象(Fn.prototype)? 
        // Object.getPrototypeOf(obj)  => 传入一个对象,获取该对象的原型对象
        // Object.setPrototypeOf(obj,proto)  => 传入一个对象,设置该对象的原型对象
        Object.setPrototypeOf(list, Fn.prototype)
        console.log(this)
        return list


    }

    Fn.prototype._abc = function () {
        console.log('能使用')
    }
    var result = new Fn()
    result._abc()
    console.log(result)

</script>

</html>